home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / drivers / vendetta.c < prev    next >
C/C++ Source or Header  |  2000-04-23  |  15KB  |  513 lines

  1. /***************************************************************************
  2.  
  3. Vendetta (GX081) (c) 1991 Konami
  4.  
  5. Preliminary driver by:
  6. Ernesto Corvi
  7. someone@secureshell.com
  8.  
  9. Notes:
  10. - collision detection is handled by a protection chip. Its emulation might
  11.   not be 100% accurate.
  12.  
  13. ***************************************************************************/
  14.  
  15. #include "driver.h"
  16. #include "vidhrdw/generic.h"
  17. #include "vidhrdw/konamiic.h"
  18. #include "cpu/konami/konami.h" /* for the callback and the firq irq definition */
  19. #include "machine/eeprom.h"
  20.  
  21. /* prototypes */
  22. static void vendetta_init_machine( void );
  23. static void vendetta_banking( int lines );
  24. static void vendetta_video_banking( int select );
  25.  
  26. int vendetta_vh_start(void);
  27. void vendetta_vh_stop(void);
  28. void vendetta_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
  29.  
  30.  
  31. /***************************************************************************
  32.  
  33.   EEPROM
  34.  
  35. ***************************************************************************/
  36.  
  37. static int init_eeprom_count;
  38.  
  39.  
  40. static struct EEPROM_interface eeprom_interface =
  41. {
  42.     7,                /* address bits */
  43.     8,                /* data bits */
  44.     "011000",        /*  read command */
  45.     "011100",        /* write command */
  46.     0,                /* erase command */
  47.     "0100000000000",/* lock command */
  48.     "0100110000000" /* unlock command */
  49. };
  50.  
  51. static void nvram_handler(void *file,int read_or_write)
  52. {
  53.     if (read_or_write)
  54.         EEPROM_save(file);
  55.     else
  56.     {
  57.         EEPROM_init(&eeprom_interface);
  58.  
  59.         if (file)
  60.         {
  61.             init_eeprom_count = 0;
  62.             EEPROM_load(file);
  63.         }
  64.         else
  65.             init_eeprom_count = 1000;
  66.     }
  67. }
  68.  
  69. static READ_HANDLER( vendetta_eeprom_r )
  70. {
  71.     int res;
  72.  
  73.     res = EEPROM_read_bit();
  74.  
  75.     res |= 0x02;//konami_eeprom_ack() << 5; /* add the ack */
  76.  
  77.     res |= readinputport( 3 ) & 0x0c; /* test switch */
  78.  
  79.     if (init_eeprom_count)
  80.     {
  81.         init_eeprom_count--;
  82.         res &= 0xfb;
  83.     }
  84.     return res;
  85. }
  86.  
  87. static int irq_enabled;
  88.  
  89. static WRITE_HANDLER( vendetta_eeprom_w )
  90. {
  91.     /* bit 0 - VOC0 - Video banking related */
  92.     /* bit 1 - VOC1 - Video banking related */
  93.     /* bit 2 - MSCHNG - Mono Sound select (Amp) */
  94.     /* bit 3 - EEPCS - Eeprom CS */
  95.     /* bit 4 - EEPCLK - Eeprom CLK */
  96.     /* bit 5 - EEPDI - Eeprom data */
  97.     /* bit 6 - IRQ enable */
  98.     /* bit 7 - Unused */
  99.  
  100.     if ( data == 0xff ) /* this is a bug in the eeprom write code */
  101.         return;
  102.  
  103.     /* EEPROM */
  104.     EEPROM_write_bit(data & 0x20);
  105.     EEPROM_set_clock_line((data & 0x10) ? ASSERT_LINE : CLEAR_LINE);
  106.     EEPROM_set_cs_line((data & 0x08) ? CLEAR_LINE : ASSERT_LINE);
  107.  
  108.     irq_enabled = ( data >> 6 ) & 1;
  109.  
  110.     vendetta_video_banking( data & 1 );
  111. }
  112.  
  113. /********************************************/
  114.  
  115. static READ_HANDLER( vendetta_K052109_r ) { return K052109_r( offset + 0x2000 ); }
  116. static WRITE_HANDLER( vendetta_K052109_w ) { K052109_w( offset + 0x2000, data ); }
  117.  
  118. static void vendetta_video_banking( int select )
  119. {
  120.     if ( select & 1 )
  121.     {
  122.         cpu_setbankhandler_r( 2, paletteram_r );
  123.         cpu_setbankhandler_w( 2, paletteram_xBBBBBGGGGGRRRRR_swap_w );
  124.         cpu_setbankhandler_r( 3, K053247_r );
  125.         cpu_setbankhandler_w( 3, K053247_w );
  126.     }
  127.     else
  128.     {
  129.         cpu_setbankhandler_r( 2, vendetta_K052109_r );
  130.         cpu_setbankhandler_w( 2, vendetta_K052109_w );
  131.         cpu_setbankhandler_r( 3, K052109_r );
  132.         cpu_setbankhandler_w( 3, K052109_w );
  133.     }
  134. }
  135.  
  136. static WRITE_HANDLER( vendetta_5fe0_w )
  137. {
  138. //char baf[40];
  139. //sprintf(baf,"5fe0 = %02x",data);
  140. //usrintf_showmessage(baf);
  141.  
  142.     /* bit 0,1 coin counters */
  143.     coin_counter_w(0,data & 0x01);
  144.     coin_counter_w(1,data & 0x02);
  145.  
  146.     /* bit 2 = BRAMBK ?? */
  147.  
  148.     /* bit 3 = enable char ROM reading through the video RAM */
  149.     K052109_set_RMRD_line((data & 0x08) ? ASSERT_LINE : CLEAR_LINE);
  150.  
  151.     /* bit 4 = INIT ?? */
  152.  
  153.     /* bit 5 = enable sprite ROM reading */
  154.     K053246_set_OBJCHA_line((data & 0x20) ? ASSERT_LINE : CLEAR_LINE);
  155. }
  156.  
  157. static READ_HANDLER( speedup_r )
  158. {
  159.     unsigned char *RAM = memory_region(REGION_CPU1);
  160.  
  161.     int data = ( RAM[0x28d2] << 8 ) | RAM[0x28d3];
  162.  
  163.     if ( data < memory_region_length(REGION_CPU1) )
  164.     {
  165.         data = ( RAM[data] << 8 ) | RAM[data + 1];
  166.  
  167.         if ( data == 0xffff )
  168.             cpu_spinuntil_int();
  169.     }
  170.  
  171.     return RAM[0x28d2];
  172. }
  173.  
  174. static void z80_nmi_callback( int param )
  175. {
  176.     cpu_set_nmi_line( 1, ASSERT_LINE );
  177. }
  178.  
  179. static WRITE_HANDLER( z80_arm_nmi_w )
  180. {
  181.     cpu_set_nmi_line( 1, CLEAR_LINE );
  182.  
  183.     timer_set( TIME_IN_USEC( 50 ), 0, z80_nmi_callback );
  184. }
  185.  
  186. static WRITE_HANDLER( z80_irq_w )
  187. {
  188.     cpu_cause_interrupt( 1, 0xff );
  189. }
  190.  
  191. READ_HANDLER( vendetta_sound_interrupt_r )
  192. {
  193.     cpu_cause_interrupt( 1, 0xff );
  194.     return 0x00;
  195. }
  196.  
  197. READ_HANDLER( vendetta_sound_r )
  198. {
  199.     /* If the sound CPU is running, read the status, otherwise
  200.        just make it pass the test */
  201.     if (Machine->sample_rate != 0)     return K053260_r(2 + offset);
  202.     else
  203.     {
  204.         static int res = 0x00;
  205.  
  206.         res = ((res + 1) & 0x07);
  207.         return offset ? res : 0x00;
  208.     }
  209. }
  210.  
  211. /********************************************/
  212.  
  213. static struct MemoryReadAddress readmem[] =
  214. {
  215.     { 0x0000, 0x1fff, MRA_BANK1    },
  216.     { 0x28d2, 0x28d2, speedup_r },
  217.     { 0x2000, 0x3fff, MRA_RAM },
  218.     { 0x5f80, 0x5f9f, K054000_r },
  219.     { 0x5fc0, 0x5fc0, input_port_0_r },
  220.     { 0x5fc1, 0x5fc1, input_port_1_r },
  221.     { 0x5fd0, 0x5fd0, vendetta_eeprom_r }, /* vblank, service */
  222.     { 0x5fd1, 0x5fd1, input_port_2_r },
  223.     { 0x5fe4, 0x5fe4, vendetta_sound_interrupt_r },
  224.     { 0x5fe6, 0x5fe7, vendetta_sound_r },
  225.     { 0x5fe8, 0x5fe9, K053246_r },
  226.     { 0x5fea, 0x5fea, watchdog_reset_r },
  227.     { 0x4000, 0x4fff, MRA_BANK3 },
  228.     { 0x6000, 0x6fff, MRA_BANK2 },
  229.     { 0x4000, 0x7fff, K052109_r },
  230.     { 0x8000, 0xffff, MRA_ROM },
  231.     { -1 }    /* end of table */
  232. };
  233.  
  234. static struct MemoryWriteAddress writemem[] =
  235. {
  236.     { 0x0000, 0x1fff, MWA_ROM },
  237.     { 0x2000, 0x3fff, MWA_RAM },
  238.     { 0x5f80, 0x5f9f, K054000_w },
  239.     { 0x5fa0, 0x5faf, K053251_w },
  240.     { 0x5fb0, 0x5fb7, K053246_w },
  241.     { 0x5fe0, 0x5fe0, vendetta_5fe0_w },
  242.     { 0x5fe2, 0x5fe2, vendetta_eeprom_w },
  243.     { 0x5fe4, 0x5fe4, z80_irq_w },
  244.     { 0x5fe6, 0x5fe7, K053260_w },
  245.     { 0x4000, 0x4fff, MWA_BANK3 },
  246.     { 0x6000, 0x6fff, MWA_BANK2 },
  247.     { 0x4000, 0x7fff, K052109_w },
  248.     { 0x8000, 0xffff, MWA_ROM },
  249.     { -1 }    /* end of table */
  250. };
  251.  
  252. static struct MemoryReadAddress readmem_sound[] =
  253. {
  254.     { 0x0000, 0xefff, MRA_ROM },
  255.     { 0xf000, 0xf7ff, MRA_RAM },
  256.     { 0xf801, 0xf801, YM2151_status_port_0_r },
  257.     { 0xfc00, 0xfc2f, K053260_r },
  258.     { -1 }    /* end of table */
  259. };
  260.  
  261. static struct MemoryWriteAddress writemem_sound[] =
  262. {
  263.     { 0x0000, 0xefff, MWA_ROM },
  264.     { 0xf000, 0xf7ff, MWA_RAM },
  265.     { 0xf800, 0xf800, YM2151_register_port_0_w },
  266.     { 0xf801, 0xf801, YM2151_data_port_0_w },
  267.     { 0xfa00, 0xfa00, z80_arm_nmi_w },
  268.     { 0xfc00, 0xfc2f, K053260_w },
  269.     { -1 }    /* end of table */
  270. };
  271.  
  272.  
  273. /***************************************************************************
  274.  
  275.     Input Ports
  276.  
  277. ***************************************************************************/
  278.  
  279. INPUT_PORTS_START( vendetta )
  280.     PORT_START
  281.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER1 )
  282.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER1 )
  283.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER1 )
  284.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER1 )
  285.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
  286.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
  287.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
  288.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
  289.  
  290.     PORT_START
  291.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER2 )
  292.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER2 )
  293.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER2 )
  294.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER2 )
  295.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
  296.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
  297.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
  298.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 )
  299.  
  300.     PORT_START
  301.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
  302.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
  303.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
  304.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
  305.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN3 )
  306.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
  307.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
  308.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
  309.  
  310.     PORT_START
  311.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )    /* EEPROM data */
  312.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )    /* EEPROM ready */
  313.     PORT_BITX(0x04, IP_ACTIVE_LOW, IPT_SERVICE, DEF_STR( Service_Mode ), KEYCODE_F2, IP_JOY_NONE )
  314.     PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_VBLANK ) /* not really vblank, object related. Its timed, otherwise sprites flicker */
  315.     PORT_BIT( 0xf0, IP_ACTIVE_LOW, IPT_UNUSED )
  316. INPUT_PORTS_END
  317.  
  318.  
  319.  
  320. /***************************************************************************
  321.  
  322.     Machine Driver
  323.  
  324. ***************************************************************************/
  325.  
  326. static struct YM2151interface ym2151_interface =
  327. {
  328.     1,            /* 1 chip */
  329.     3579545,    /* 3.579545 MHz */
  330.     { YM3012_VOL(35,MIXER_PAN_LEFT,35,MIXER_PAN_RIGHT) },
  331.     { 0 }
  332. };
  333.  
  334. static struct K053260_interface k053260_interface =
  335. {
  336.     3579545,
  337.     REGION_SOUND1, /* memory region */
  338.     { MIXER(75,MIXER_PAN_LEFT), MIXER(75,MIXER_PAN_RIGHT) },
  339.     0
  340. };
  341.  
  342. static int vendetta_irq( void )
  343. {
  344.     if (irq_enabled)
  345.         return KONAMI_INT_IRQ;
  346.     else
  347.         return ignore_interrupt();
  348. }
  349.  
  350. static struct MachineDriver machine_driver_vendetta =
  351. {
  352.     /* basic machine hardware */
  353.     {
  354.         {
  355.             CPU_KONAMI,
  356.             3000000,        /* ? */
  357.             readmem,writemem,0,0,
  358.             vendetta_irq,1
  359.         },
  360.         {
  361.             CPU_Z80 | CPU_AUDIO_CPU,
  362.             3579545,
  363.             readmem_sound, writemem_sound,0,0,
  364.             ignore_interrupt,0    /* interrupts are triggered by the main CPU */
  365.         }
  366.     },
  367.     60, DEFAULT_REAL_60HZ_VBLANK_DURATION,    /* frames per second, vblank duration */
  368.     1,    /* 1 CPU slice per frame - interleaving is forced when a sound command is written */
  369.     vendetta_init_machine,
  370.  
  371.     /* video hardware */
  372.     64*8, 32*8, { 13*8, (64-13)*8-1, 2*8, 30*8-1 },
  373.     0,    /* gfx decoded by konamiic.c */
  374.     2048, 2048,
  375.     0,
  376.  
  377.     VIDEO_TYPE_RASTER | VIDEO_MODIFIES_PALETTE,
  378.     0,
  379.     vendetta_vh_start,
  380.     vendetta_vh_stop,
  381.     vendetta_vh_screenrefresh,
  382.  
  383.     /* sound hardware */
  384.     SOUND_SUPPORTS_STEREO,0,0,0,
  385.     {
  386.         {
  387.             SOUND_YM2151,
  388.             &ym2151_interface
  389.         },
  390.         {
  391.             SOUND_K053260,
  392.             &k053260_interface
  393.         }
  394.     },
  395.  
  396.     nvram_handler
  397. };
  398.  
  399. /***************************************************************************
  400.  
  401.   Game ROMs
  402.  
  403. ***************************************************************************/
  404.  
  405. ROM_START( vendetta )
  406.     ROM_REGION( 0x49000, REGION_CPU1 ) /* code + banked roms + banked ram */
  407.     ROM_LOAD( "081u01", 0x10000, 0x38000, 0xb4d9ade5 )
  408.     ROM_CONTINUE(        0x08000, 0x08000 )
  409.  
  410.     ROM_REGION( 0x10000, REGION_CPU2 ) /* 64k for the sound CPU */
  411.     ROM_LOAD( "081b02", 0x000000, 0x10000, 0x4c604d9b )
  412.  
  413.     ROM_REGION( 0x100000, REGION_GFX1 ) /* graphics ( don't dispose as the program can read them ) */
  414.     ROM_LOAD( "081a09", 0x000000, 0x080000, 0xb4c777a9 ) /* characters */
  415.     ROM_LOAD( "081a08", 0x080000, 0x080000, 0x272ac8d9 ) /* characters */
  416.  
  417.     ROM_REGION( 0x400000, REGION_GFX2 ) /* graphics ( don't dispose as the program can read them ) */
  418.     ROM_LOAD( "081a04", 0x000000, 0x100000, 0x464b9aa4 ) /* sprites */
  419.     ROM_LOAD( "081a05", 0x100000, 0x100000, 0x4e173759 ) /* sprites */
  420.     ROM_LOAD( "081a06", 0x200000, 0x100000, 0xe9fe6d80 ) /* sprites */
  421.     ROM_LOAD( "081a07", 0x300000, 0x100000, 0x8a22b29a ) /* sprites */
  422.  
  423.     ROM_REGION( 0x100000, REGION_SOUND1 ) /* 053260 samples */
  424.     ROM_LOAD( "081a03", 0x000000, 0x100000, 0x14b6baea )
  425. ROM_END
  426.  
  427. ROM_START( vendett2 )
  428.     ROM_REGION( 0x49000, REGION_CPU1 ) /* code + banked roms + banked ram */
  429.     ROM_LOAD( "081d01", 0x10000, 0x38000, 0x335da495 )
  430.     ROM_CONTINUE(        0x08000, 0x08000 )
  431.  
  432.     ROM_REGION( 0x10000, REGION_CPU2 ) /* 64k for the sound CPU */
  433.     ROM_LOAD( "081b02", 0x000000, 0x10000, 0x4c604d9b )
  434.  
  435.     ROM_REGION( 0x100000, REGION_GFX1 ) /* graphics ( don't dispose as the program can read them ) */
  436.     ROM_LOAD( "081a09", 0x000000, 0x080000, 0xb4c777a9 ) /* characters */
  437.     ROM_LOAD( "081a08", 0x080000, 0x080000, 0x272ac8d9 ) /* characters */
  438.  
  439.     ROM_REGION( 0x400000, REGION_GFX2 ) /* graphics ( don't dispose as the program can read them ) */
  440.     ROM_LOAD( "081a04", 0x000000, 0x100000, 0x464b9aa4 ) /* sprites */
  441.     ROM_LOAD( "081a05", 0x100000, 0x100000, 0x4e173759 ) /* sprites */
  442.     ROM_LOAD( "081a06", 0x200000, 0x100000, 0xe9fe6d80 ) /* sprites */
  443.     ROM_LOAD( "081a07", 0x300000, 0x100000, 0x8a22b29a ) /* sprites */
  444.  
  445.     ROM_REGION( 0x100000, REGION_SOUND1 ) /* 053260 samples */
  446.     ROM_LOAD( "081a03", 0x000000, 0x100000, 0x14b6baea )
  447. ROM_END
  448.  
  449. ROM_START( vendettj )
  450.     ROM_REGION( 0x49000, REGION_CPU1 ) /* code + banked roms + banked ram */
  451.     ROM_LOAD( "081p01", 0x10000, 0x38000, 0x5fe30242 )
  452.     ROM_CONTINUE(        0x08000, 0x08000 )
  453.  
  454.     ROM_REGION( 0x10000, REGION_CPU2 ) /* 64k for the sound CPU */
  455.     ROM_LOAD( "081b02", 0x000000, 0x10000, 0x4c604d9b )
  456.  
  457.     ROM_REGION( 0x100000, REGION_GFX1 ) /* graphics ( don't dispose as the program can read them ) */
  458.     ROM_LOAD( "081a09", 0x000000, 0x080000, 0xb4c777a9 ) /* characters */
  459.     ROM_LOAD( "081a08", 0x080000, 0x080000, 0x272ac8d9 ) /* characters */
  460.  
  461.     ROM_REGION( 0x400000, REGION_GFX2 ) /* graphics ( don't dispose as the program can read them ) */
  462.     ROM_LOAD( "081a04", 0x000000, 0x100000, 0x464b9aa4 ) /* sprites */
  463.     ROM_LOAD( "081a05", 0x100000, 0x100000, 0x4e173759 ) /* sprites */
  464.     ROM_LOAD( "081a06", 0x200000, 0x100000, 0xe9fe6d80 ) /* sprites */
  465.     ROM_LOAD( "081a07", 0x300000, 0x100000, 0x8a22b29a ) /* sprites */
  466.  
  467.     ROM_REGION( 0x100000, REGION_SOUND1 ) /* 053260 samples */
  468.     ROM_LOAD( "081a03", 0x000000, 0x100000, 0x14b6baea )
  469. ROM_END
  470.  
  471.  
  472. /***************************************************************************
  473.  
  474.   Game driver(s)
  475.  
  476. ***************************************************************************/
  477.  
  478. static void vendetta_banking( int lines )
  479. {
  480.     unsigned char *RAM = memory_region(REGION_CPU1);
  481.  
  482.     if ( lines >= 0x1c )
  483.     {
  484.         logerror("PC = %04x : Unknown bank selected %02x\n", cpu_get_pc(), lines );
  485.     }
  486.     else
  487.         cpu_setbank( 1, &RAM[ 0x10000 + ( lines * 0x2000 ) ] );
  488. }
  489.  
  490. static void vendetta_init_machine( void )
  491. {
  492.     konami_cpu_setlines_callback = vendetta_banking;
  493.  
  494.     paletteram = &memory_region(REGION_CPU1)[0x48000];
  495.     irq_enabled = 0;
  496.  
  497.     /* init banks */
  498.     cpu_setbank( 1, &memory_region(REGION_CPU1)[0x10000] );
  499.     vendetta_video_banking( 0 );
  500. }
  501.  
  502. static void init_vendetta(void)
  503. {
  504.     konami_rom_deinterleave_2(REGION_GFX1);
  505.     konami_rom_deinterleave_4(REGION_GFX2);
  506. }
  507.  
  508.  
  509.  
  510. GAME( 1991, vendetta, 0,        vendetta, vendetta, vendetta, ROT0, "Konami", "Vendetta (Asia set 1)" )
  511. GAME( 1991, vendett2, vendetta, vendetta, vendetta, vendetta, ROT0, "Konami", "Vendetta (Asia set 2)" )
  512. GAME( 1991, vendettj, vendetta, vendetta, vendetta, vendetta, ROT0, "Konami", "Crime Fighters 2 (Japan)" )
  513.